package ar.unsam.tp.test

import ar.unsam.tp.programa.Administrador
import ar.unsam.tp.tipo.Estandar
import ar.unsam.tp.programa.Jugador
import ar.unsam.tp.programa.Partido
import org.junit.Before
import org.junit.Test

import static org.mockito.Matchers.*
import static org.mockito.Mockito.*

class TestEnvioMensajes {
	var Partido mockpartido = mock(typeof(Partido))
	var mockAdmin = mock(typeof(Administrador))
	var mockJugador = mock(typeof(Jugador))
	var mockJugador2 = mock(typeof(Jugador))
	
	var Jugador jugador1
	var Jugador jugador2
	var Jugador jugador3
	var Jugador jugador4
	var Jugador jugador5
	var Jugador jugador6
	var Jugador jugador7
	var Jugador jugador8
	var Jugador jugador9

	@Before
	def void init() {

		jugador1 = new Jugador("jugador1")
		jugador2 = new Jugador("jugador2")
		jugador3 = new Jugador("jugador3")
		jugador4 = new Jugador("jugador4")
		jugador5 = new Jugador("jugador5")
		jugador6 = new Jugador("jugador6")
		jugador7 = new Jugador("jugador7")
		jugador8 = new Jugador("jugador8")
		jugador9 = new Jugador("jugador9")
        
        
		jugador1.setTipoDeInscripcion(new Estandar())
		jugador2.setTipoDeInscripcion(new Estandar())
		jugador3.setTipoDeInscripcion(new Estandar())
		jugador4.setTipoDeInscripcion(new Estandar())
		jugador5.setTipoDeInscripcion(new Estandar())
		jugador6.setTipoDeInscripcion(new Estandar())
		jugador7.setTipoDeInscripcion(new Estandar())
		jugador8.setTipoDeInscripcion(new Estandar())
		jugador9.setTipoDeInscripcion(new Estandar())

		mockpartido.admin = mockAdmin
		
	}

	@Test
	def void testMensajeEnviadoJugadorAlta() {

		mockJugador.amigos.add(mockJugador2)
		mockpartido.notificoJugadorInscripto(mockJugador)

		verify(mockpartido, times(1)).notificoJugadorInscripto(mockJugador)
	    
	}

	@Test
	def void testMensajeEnviadoBaja() {
		
		mockpartido.alta(mockJugador)
		mockpartido.alta(jugador1)
		mockpartido.alta(jugador2)
		mockpartido.alta(jugador3)
		mockpartido.alta(jugador4)
		mockpartido.alta(jugador5)
		mockpartido.alta(jugador6)
		mockpartido.alta(jugador7)
		mockpartido.alta(jugador8)
		mockpartido.alta(jugador9)
		
		mockpartido.baja(mockJugador)
		
		mockpartido.notificoPartidoSinConfirmar
		
		verify(mockpartido, times(1)).notificoPartidoSinConfirmar
	
	}
	
	@Test
	def void testMensajeEnviadoAdminPartidoConfirmado() {
		
		mockpartido.alta(mockJugador)
		mockpartido.alta(jugador1)
		mockpartido.alta(jugador2)
		mockpartido.alta(jugador3)
		mockpartido.alta(jugador4)
		mockpartido.alta(jugador5)
		mockpartido.alta(jugador6)
		mockpartido.alta(jugador7)
		mockpartido.alta(jugador8)
		mockpartido.alta(jugador9)
		
		mockpartido.notificoPartidoConfirmado
		
		verify(mockpartido, times(1)).notificoPartidoConfirmado
		
	}
	
}
